<?php
/**
 * Created by .
 * User: luogan
 * Date: 2022/1/21
 */

namespace app\model;


use think\Model;

class BaseModel extends Model
{

    /**
     * 配合withSearch搜索器使用
     * @param $data
     * @param bool $_area 是否显示地区权限数据
     * @return array
     */
    protected function searchFields($data){
        unset($data['page']);
        unset($data['size']);
        $data = array_keys($data);
        return $data;
    }

    /**
     * 配合withSearch搜索器使用
     * @param $data
     * @param bool $_area
     * @return mixed
     */
    protected function searchData($data){
        unset($data['page']);
        unset($data['size']);
        return $data;
    }

    /**
     * 获取分页条数
     * @param $data
     * @return int
     */
    protected function getLimit($data){

        $size = 15;
        if (isset($data['size'])){
            $size = $data['size'];
        }
        return $size;
    }

    /**
     * 递归 整理分类
     * @param int $show_deep 显示深度
     * @param array $class_list 类别内容集合
     * @param int $deep 深度
     * @param int $parent_id 父类编号
     * @param int $i 上次循环编号
     * @return array $show_class 返回数组形式的查询结果
     */
    public  function getTreeClassList($showDeep, $classList, $deep = 1, $parentId = 0, $i = 0)
    {
        static $showClass = [];//树状的平行数组
        if (is_array($classList) && !empty($classList)) {
            $size = count($classList);
            if ($i == 0) $showClass = [];//从0开始时清空数组，防止多次调用后出现重复
            for ($i; $i < $size; $i++) {//$i为上次循环到的分类编号，避免重新从第一条开始
                $val = $classList[$i];
                $gcId = $val['id'];
                $gcParentId = $val['parent_id'];
                if ($gcParentId == $parentId) {
                    $val['deep'] = $deep;
                    $showClass[] = $val;
                    if ($deep < $showDeep && $deep < 5) {//本次深度小于显示深度时执行，避免取出的数据无用
                        $this->getTreeClassList($showDeep, $classList, $deep + 1, $gcId, $i + 1);
                    }
                }
                if ($gcParentId > $parentId) break;//当前分类的父编号大于本次递归的时退出循环
            }
        }
        return $showClass;
    }

}
